论文笔记:StarCoder : May The Source Be With You !

您所在的位置:网站首页 jupyter notebook文件后缀 论文笔记:StarCoder : May The Source Be With You !

论文笔记:StarCoder : May The Source Be With You !

2023-05-11 07:23| 来源: 网络整理| 查看: 265

导语

这篇工作是BigCode社区继SantaCoder后的最新工作,作者发布了具有15.5B参数及8K上下文长度的代码大模型StarCoder,StarCoder模型优于支持多种编程语言的每个开放的Code LLMs模型,并与OpenAI code-cushman-001模型性能相当。

链接:github.com/bigcode-pro… 1 简介

本文讨论了大型语言模型(LLMs)的安全和透明度问题。尽管LLMs的应用已经取得了很大的成功,但是仍然有一些技术和社会问题需要解决。该文章主要关注Code LLMs的训练和应用,但同时也提到了一些普适于生成式AI技术的问题。这些问题包括版权问题、数据保护问题、透明度和开放性问题等等。

本文介绍了BigCode社区的相关工作,他们开发了StarCoder和StarCoderBase两个Code LLMs,这是对目前已有的其他开源Code LLMs最全面的评估,并且提供了透明度和安全性方面的保障。StarCoder和StarCoderBase在80多种编程语言上进行了训练,并且具有新的架构特征。在评估中,StarCoder优于目前其他开源Code LLMs,并在fine-tune的Python上表现出色。作者还提出了开放的LLM研究开发方式可以促进科研的进展,但也需要注意安全和隐私问题。在这篇文章中,作者提供了几个重要的方法来确保LLMs的透明度和安全性。

2 相关工作

语言模型使用统计和机器学习技术来预测单词序列的可能性。早期的大规模语言模型采用了Ngrams和简单的平滑技术。后来,各种神经网络体系结构,如前馈网络和递归网络,被应用于语言建模任务。随着Transformer架构的发展,出现了上下文化的词嵌入和生成式预训练模型,例如GPT模型。

近年来,提高模型性能的成功方法之一是扩大模型参数和训练数据的规模。一些大型技术公司开发了高性能的语言模型,但没有发布权重或提供完整的方法论。此外,一些开放性AI公司提供了有偿的语言模型API服务。

同时,许多开放性的语言模型已经发布到AI社区,虽然它们通常没有封闭性模型那么强大。不过,公开访问的语言模型之间的透明度也存在很大的差异。例如,一些公司公开了模型权重,但未透露训练数据集,而其他公司则只公开了高层次的数据收集和过滤过程。虽然PolyCoder和SantaCoder这些模型公开了训练集,但它们相对较小且训练数据量不及本文研究的模型。 image.png

3 数据创建和生成

作者只选取了The Stack v1.2这个数据集,进行了数据清理工作,结合了启发式过滤和人工检查。对于编程语言的选择,作者基于文件扩展名,选择了86种语言,并只包含数据大于500MB的编程语言。为了确保数据的质量,作者进行了可视化检查,并移除了不符合要求的文件。作者还介绍了其他数据源的处理,包括Jupyter notebooks、GitHub issues和Git commits等。最后,作者进行了数据去重,并对数据源进行了加权处理。 image.png

3.1 编程语言

在处理StarCoderBase的训练数据时,从The Stack v1.2中挑选出86种编程语言,并将数据分配给这些编程语言。选择的标准是:文件扩展名、数据量大于500MB,以及出现在Githut 2.0或2022年12月TIOBE编程语言流行度排名前50名的语言。通过视觉检查和其他过滤方法,清理数据并排除一些文件类型。最终,编程语言的列表和数据清理的结果都可在论文中的表格中找到。

3.2 Jupyter Notebooks

针对Jupyter笔记本,通过Jupytext将其转换为两个不同的数据集:Jupyter-脚本和Jupyter-结构化。其中,Jupyter-脚本数据集包含了1,432,992个脚本文件,这些文件来源于The Stack中的Jupyter笔记本,转换过程使用了Jupytext和Guesslang两个开源工具。Jupyter-结构化数据集包含了1,045,605个笔记本的结构化数据,其中包括Python代码和Markdown文本。笔记本中的Markdown文本和代码块被合并成连续的文本块,每个块都包含其前面的Markdown文本和对应的Python代码,形成自然的指令对。如果代码块有输出,输出也会被包含在块中。

image.png

3.3-3.4 Github Issue和Commits

这两个数据源的处理方式较为简单。对于Github Issue,作者删除了自动回复和短消息,并排除了来自机器人的评论,只保留了有两个或更多用户参与的对话。对于GIT Commits,作者从BigQuery中获取了数据,并使用一些启发式方法进行了筛选和采样,以获得高质量的数据集。最终,得到了约64GB的提交数据。 image.png

3.5-3.6 去重,重加权

对数据进行了去重处理,避免了模型学习重复的代码,提高了数据的质量。作者使用了MinHashes和Locally Sensitive Hashing的组合进行去重处理,适用于所有编程语言和Jupyter notebooks。然而,由于时间限制,没有对Git commits进行去重处理。此外,作者认为在Github issues中发现重复的可能性不大,因此也没有对其进行去重处理。关于数据源的加权,作者发现一些高资源的编程语言(如C、C++、C#、Java、Javascript、Python和PHP)拥有相似的数据量,作者遵循数据的自然分布进行训练,并按照其体积比例采样数据源。但对JSON、YAML和CSS进行了例外处理,因为作者只希望LLM学习这些文件中的数据格式,而不会浪费计算资源来记忆这些数据。

image.png

4 个人敏感信息去除

本节主要介绍了作者们如何从训练数据中移除个人身份信息(PII),并且详细介绍了他们在数据收集和模型训练方面所做的工作。

4.1 数据收集

本节作者详细介绍了他们如何使用Toloka平台与来自35个国家的1,399名众包工人合作,为源代码中的PII注释数据集。数据集包括12,000个文件,每个文件包含大约50行用31种编程语言编写的代码,其中包括各种PII类型,如名称、用户名、电子邮件、IP地址、密码和ID。在注释期间,为了确保对于不同的PII类型得到合适的标注,作者们根据特定上下文进行了区分,并对其进行了分类,如许可证头、占位符或机密数据。

4.2-4.3 StarEncoder与PII检测模型

作者训练了一个编码器模型,用于代码和文本相关的任务,并且可以高效地进行微调。作者们利用了BERT的掩码语言建模(MLM)和下一句子预测(NSP)目标,并将这两个目标定义为训练目标。然后,在第4.3节中,他们利用这个编码器模型在PII注释数据集上进行了命名实体识别(NER)的微调,以检测姓名、电子邮件、密钥、密码、IP地址和用户名等PII实体。

作者还介绍了一些后处理技术,以减少误报,例如在名称中至少需要一个空格,且密码长度必须大于8位。他们最终将被检测出的PII实体替换为、、、等占位符。总之,这些方法在移除PII方面取得了很好的效果,并且这个工作可以为未来的研究提供一个重要的数据集和技术。

5 模型训练

本节介绍关于StarCoder模型训练过程的信息。作者一共训练了两个模型,他们分别是:

StarCoderBase是第一个基于1万亿个令牌进行训练的模型,这些令牌来自第3节描述的精选数据集。 StarCoder是StarCoderBase的微调版本,使用另外35B个Python令牌进行训练(大约2个Epoch)。

具体训练细节略;

6 评估

主要的评估结果如下,可以看到StarCoder在HumanEval数据集上已经超过了OpenAI的code-cushman-001模型:

image.png

image.png

image.png

7 自然语言评估

主要的评估结果如下:

image.png

image.png

image.png

image.png

8-10 定性评估、属性工具、局限性

内容过长,略,感兴趣的读者请参阅原文

11 总结

本文描述了BigCode社区在创建StarCoderBase和StarCoder方面所做的努力,StarCoder是一个开放访问的15.5B参数大型语言模型(LLM)。在研发过程的各个方面都提供了充分的透明度,包括训练数据、数据管理过程、PII编校管道和模型培训。本文对迄今为止最广泛的CodeLLM进行了评估,发现StarCoder优于其他CodeLLM,如CodeGen和CodeGeeX,并且匹配或优于OpenAI的封闭访问Code-cushman-001模型。通过使用开放负责任的人工智能模型许可证发布StarCoder模型,并通过在GitHub上开源所有用于构建模型的代码库。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3